package mybatisplus.spring.boot.admin.common.util;

import org.apache.commons.lang.StringUtils;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MathUtil {

    public static Long toLong(String number) {
        try {
            if (StringUtils.isNotBlank(number)) return Long.parseLong(number);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0L;
    }

    public static Integer toInt(String number) {
        try {
            if (StringUtils.isNotBlank(number)) return Integer.parseInt(number);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    public static Integer toInteget(String number) {
        try {
            if (StringUtils.isNotBlank(number)) return Integer.parseInt(number);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * String 转 Int
     *
     * @param value 需要转换的值
     */
    public static int stringToInt(String value) {
        if (value != null && !value.equals("")) {
            try {
                return Integer.parseInt(value);
            } catch (NumberFormatException e) {
                try {
                    return (int) stringToDouble(value);
                } catch (Exception ee) {
                    return 0;
                }
            }
        }
        return 0;
    }

    /**
     * String 转 Double
     *
     * @param value 需要转换的值
     */
    public static double stringToDouble(String value) {
        if (value != null && !value.equals("")) {
            try {
                return Double.parseDouble(value);
            } catch (NumberFormatException e) {
                return 0;
            }
        }
        return 0;
    }

    /**
     * String 转 Float
     *
     * @param value 需要转换的值
     */
    public static float stringToFloat(String value) {
        if (value != null && !value.equals("")) {
            try {
                return Float.parseFloat(value);
            } catch (NumberFormatException e) {
                return 0;
            }
        }
        return 0;
    }

    /**
     * boolean 转 int
     *
     * @param value 需要转换的值
     */
    public static int booleanToInt(boolean value) {
        if (value) {
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * 最多保留一位小数点，省略小数点后面多余的0
     */
    public static String keepMost1Decimal(double value) {
        DecimalFormat df = new DecimalFormat("##0.#");
        return df.format(value);
    }

    /**
     * 最多保留两个小数点，省略小数点后面多余的0
     */
    public static String keepMost2Decimal(double value) {
        DecimalFormat df = new DecimalFormat("##0.##");
        return df.format(value);
    }

    /**
     * 保留一个小数点
     */
    public static String keep1decimal(double value) {
        DecimalFormat df = new DecimalFormat("##0.0");
        return df.format(value);
    }

    /**
     * 保留两个小数点
     */
    public static String keep2decimal(double value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return df.format(value);
    }

    /**
     * 字符串保留一位小数点
     */
    public static String stringKeep1Decimal(String value) {
        DecimalFormat df = new DecimalFormat("##0.0");
        return df.format(stringToDouble(value));
    }

    /**
     * 字符串保留两个小数点
     */
    public static String stringKeep2Decimal(String value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return df.format(stringToDouble(value));
    }

    /**
     * App带人民币符号的商品的价格格式：¥1.00
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppWithSign(String value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return "¥" + df.format(stringToDouble(value));
    }

    /**
     * App带人民币符号的商品的价格格式：¥1.00
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppWithSign(String util, String value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return util + df.format(stringToDouble(value));
    }

    /**
     * App带人民币符号的商品的价格格式：¥1.00
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppWithSign(double value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return "¥" + df.format(value);
    }

    /**
     * App未带人民币符号的商品的价格格式：1.00
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppWithOutSign(String value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return df.format(stringToDouble(value));
    }

    /**
     * 保留整数位
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppRound(String value) {
        DecimalFormat df = new DecimalFormat("0");
        return df.format(stringToDouble(value));
    }

    /**
     * 保留整数位
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppRoundWithSign(double value) {
        DecimalFormat df = new DecimalFormat("0");
        return "¥" + df.format(value);
    }

    /**
     * App未带人民币符号的商品的价格格式：1.00
     *
     * @param value 需要转换的价格
     */
    public static String priceForAppWithOutSign(double value) {
        DecimalFormat df = new DecimalFormat("##0.00");
        return df.format(value);
    }

    /**
     * 不足两位首位添0
     *
     * @param value
     * @return
     */
    public static String intForTwoSize(int value) {
        String temp = String.valueOf(value);
        if (temp.length() <= 1) {
            return "0" + temp;
        }
        return temp;
    }

    /**
     * 获取小数点位数
     *
     * @param digit
     * @return
     */
    public static int getPointLength(String digit) {

        //判断小数点长度
        if (digit.contains(".")) {
            String[] array = digit.split("\\.");
            if (array.length > 1) {
                int pointLength = array[1].length();
                return pointLength;
            }
        }

        return 0;
    }

    /**
     * 是否是金钱样式
     *
     * @param number
     * @return
     */
    public static boolean isMoneyNum(String number) {
        Pattern mPattern = Pattern.compile("([0-9]|\\.)*");
        Matcher matcher = mPattern.matcher(number);
        return matcher.matches();
    }

    public static String toMoney(double value) {
        DecimalFormat df = new DecimalFormat(",###.##");
        return df.format(value);
    }

    public static String toPrice(double value) {
        DecimalFormat df = new DecimalFormat("##0.##");
        return df.format(value);
    }

    public static final String money = "##0.##";
    public static final String rate = "##0.###";

    public static String toNum(double value, String pattern) {
        DecimalFormat df = new DecimalFormat(pattern);
        return df.format(value);
    }

    public static boolean isNum(String number) {
        try {
            Double.parseDouble(number);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}
